﻿/***************************************************************
 * 开发人员：网魂小兵@http://www.mozlite.com
 * 
 * 网站域名管理类。
 * 
 * 最后修改：2011-10-29
 * ************************************************************/
namespace Mozlite.Common.Configuration
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    /// <summary>
    /// 网站域名管理类。
    /// </summary>
    public class SiteDomains
    {
        private SiteDomains() { }

        private const string cacheKey = "Mozlite.Common.Configuration.SiteDomains";

        /// <summary>
        /// 新建一个网站实例。
        /// </summary>
        /// <param name="site">网站实例。</param>
        /// <returns>返回是否创建成功。</returns>
        public static CreateSiteStatus SaveSite(SiteDomain site)
        {
            CreateSiteStatus status = ConfigurationDataProvider.Current.SaveSite(site);
            if (status == CreateSiteStatus.Success || status == CreateSiteStatus.Updated)
            {
                if (site.IsDefault)
                    SetSiteDefault(site.SiteID);
                Caches.Remove(cacheKey);
            }
            return status;
        }

        /// <summary>
        /// 删除网站实例，和网站设置信息无关。
        /// </summary>
        /// <param name="siteID">网站域名ID。</param>
        /// <returns>返回是否删除成功。</returns>
        public static bool DeleteSite(int siteID)
        {
            if (ConfigurationDataProvider.Current.DeleteSite(siteID))
            {
                Caches.Remove(cacheKey);
                return true;
            }
            return false;
        }

        /// <summary>
        /// 加载所有网站信息。
        /// </summary>
        /// <returns>返回所有网站信息列表。</returns>
        /// <remarks>字典键为域名前加“.”标记。</remarks>
        public static Dictionary<string, SiteDomain> LoadSites()
        {
            return Caches.Get<Dictionary<string, SiteDomain>>(cacheKey, Globals.MinuteSeconds, Globals.MinuteSeconds * 3, () =>
            {
                return ConfigurationDataProvider.Current.LoadSites();
            });
        }

        /// <summary>
        /// 设置默认网站地址。
        /// </summary>
        /// <param name="siteID">网站ID。</param>
        /// <returns>返回设置是否正确。</returns>
        public static bool SetSiteDefault(int siteID) {
            if (ConfigurationDataProvider.Current.SetSiteDefault(siteID))
            {
                Caches.Remove(cacheKey);
                return true;
            }
            return false;
        }

        /// <summary>
        /// 迭代处理各个站点。
        /// </summary>
        /// <param name="action">传入站点ID。</param>
        /// <param name="handler">错误处理器。</param>
        public static void Foreach(Action<int> action, Action<Exception> handler = null)
        {
            foreach (var site in LoadSites().Values)
            {
                try
                {
                    action(site.SettingsID);
                }
                catch (Exception ex)
                {
                    if (handler != null)
                        handler(ex);
                }
            }
        }

        /// <summary>
        /// 获取当前网站实例。
        /// </summary>
        /// <param name="siteID">网站ID。</param>
        /// <returns>返回网站实例。</returns>
        public static SiteDomain GetSite(int siteID) {
            return ConfigurationDataProvider.Current.GetSite(siteID);
        }
    }
}
